package offerbook.Code28_recallback_回溯_N皇后_排列;

import java.util.Set;
import java.util.TreeSet;

/**
 * Created at 2019/10/25 0025 下午 9:50
 * --
 * 求一个字符串的所有可能组合：
 * 如"abc"  : a,b,c,ab,ac,bc,abc
 *
 * 如果要求按照字典顺序打印，那么返回一个treeSet
 */
public class Code28_AllCombination {

    public static void main(String[] args) {
        allCombination("abc").forEach(System.out::println);
    }

    public static Set<String> allCombination(String str){
        Set<String> res = new TreeSet<>();
        if(str == null || str.length() == 0){
            return res;
        }
        process(str.toCharArray(),"",0,res);
        return res;
    }

    private static void process(char[] chars, String s, int index,Set<String>  res) {
        if(index == chars.length){
            if(!"".equals(s)){
                res.add(s);
            }
            return;
        }
        //当前不要
        process(chars,s,index+1,res);
        //当前要
        process(chars,s+String.valueOf(chars[index]),index+1,res);
    }
}
